﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SistemaGO_Library.Entidades.Terceiro;
using SistemaGO_Library;
using System.Collections;

namespace SistemaGO_Desktop.Visao.Telas
{
    public partial class frmTerceiros : Form
    {
        private static frmTerceiros instancia = null;
        Terceiro ter = new Terceiro();
        Fachada fachada = Fachada.getInstance();
        ArrayList arrayTbsCadastrar, arrayTbsAlterar, arrayCbsCadastrar, arrayCbsAlterar, arrayMtbsCadastrar, arrayMtbsAlterar;
        bool flag = false;
        bool flag2 = false;
        bool flag3 = false;

        private frmTerceiros() {
            InitializeComponent();
            tbCadastrarNomeTerceiros.Focus();
            tbCadastrarCodTerceiros.Text = fachada.buscarCodigoTerceiro().ToString();

            arrayTbsCadastrar = new ArrayList();
            arrayCbsCadastrar = new ArrayList();
            arrayMtbsCadastrar = new ArrayList();
            arrayTbsCadastrar.Add(tbCadastrarNomeTerceiros);
            arrayTbsCadastrar.Add(tbCadastrarEmailTerceiros);
            arrayMtbsCadastrar.Add(mtbCadastrarCnpjTerceiros);
            arrayMtbsCadastrar.Add(mtbCadastrarFoneTerceiros);
            arrayTbsCadastrar.Add(tbCadastrarAvRuaTerceiros);
            arrayTbsCadastrar.Add(tbCadastrarNumeroTerceiros);
            //arrayTbsCadastrar.Add(tbCadastrarComplementoTerceiros);
            arrayCbsCadastrar.Add(cbCadastrarUfTerceiros);
            arrayCbsCadastrar.Add(cbCadastrarCidadeTerceiros);
            arrayCbsCadastrar.Add(cbCadastrarBairroTerceiros);
            arrayMtbsCadastrar.Add(mtbCadastrarCepTerceiros);

            arrayTbsAlterar = new ArrayList();
            arrayCbsAlterar = new ArrayList();
            arrayMtbsAlterar = new ArrayList();
            //arrayTbsAlterar.Add(tbAlterarCodTerceiros);
            arrayTbsAlterar.Add(tbAlterarNomeTerceiros);
            arrayTbsAlterar.Add(tbAlterarEmailTerceiros);
            arrayMtbsAlterar.Add(mtbAlterarCnpjTerceiros);
            arrayMtbsAlterar.Add(mtbAlterarFoneTerceiros);
            arrayTbsAlterar.Add(tbAlterarAvRuaTerceiros);
            arrayTbsAlterar.Add(tbAlterarNumeroTerceiros);
            //arrayTbsAlterar.Add(tbAlterarComplementoTerceiros);
            arrayCbsAlterar.Add(cbAlterarUfTerceiros);
            arrayCbsAlterar.Add(cbAlterarCidadeTerceiros);
            arrayCbsAlterar.Add(cbAlterarBairroTerceiros);
            arrayMtbsAlterar.Add(mtbAlterarCepTerceiros);
        }

        public static frmTerceiros getInstance() {
            if (instancia == null) {
                instancia = new frmTerceiros();
            } else {
                instancia.Focus();
            }
            return instancia;
        }

        private void limparTela() {
            //Campos do cadastro
            tbCadastrarNomeTerceiros.Text = "";
            tbCadastrarEmailTerceiros.Text = "";
            mtbCadastrarCnpjTerceiros.Text = "";
            mtbCadastrarFoneTerceiros.Text = "";
            tbCadastrarAvRuaTerceiros.Text = "";
            tbCadastrarNumeroTerceiros.Text = "";
            tbCadastrarComplementoTerceiros.Text = "";
            cbCadastrarUfTerceiros.Text = "Selecione";
            cbCadastrarCidadeTerceiros.Text = "Selecione";
            cbCadastrarBairroTerceiros.Text = "Selecione";
            mtbCadastrarCepTerceiros.Text = "";
            //Campos da alteração
            tbAlterarCodTerceiros.Text = "";
            tbAlterarNomeTerceiros.Text = "";
            tbAlterarEmailTerceiros.Text = "";
            mtbAlterarCnpjTerceiros.Text = "";
            mtbAlterarFoneTerceiros.Text = "";
            tbAlterarAvRuaTerceiros.Text = "";
            tbAlterarNumeroTerceiros.Text = "";
            tbAlterarComplementoTerceiros.Text = "";
            cbAlterarUfTerceiros.Text = "";
            cbAlterarCidadeTerceiros.Text = "";
            cbAlterarBairroTerceiros.Text = "";
            mtbAlterarCepTerceiros.Text = "";
            //Campos da exclusão
            tbExcluirCodTerceiros.Text = "";
            tbExcluirNomeTerceiros.Text = "";
            tbExcluirEmailTerceiros.Text = "";
            mtbExcluirCnpjTerceiros.Text = "";
            mtbExcluirFoneTerceiros.Text = "";
            tbExcluirAvRuaTerceiros.Text = "";
            tbExcluirNumeroTerceiros.Text = "";
            tbExcluirComplementoTerceiros.Text = "";
            cbExcluirUfTerceiros.Text = "";
            cbExcluirCidadeTerceiros.Text = "";
            cbExcluirBairroTerceiros.Text = "";
            mtbExcluirCepTerceiros.Text = "";
        }

        private void isEmptyTb(ArrayList tb)
        {
            for (int i = 0; i < tb.Count; i++)
            {
                if (((TextBox)tb[i]).Text.Trim().Equals(""))
                {
                    MessageBox.Show("Campo " + ((TextBox)tb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((TextBox)tb[i]).Focus();
                    flag = true;
                    return;
                }
            }
            flag = false;
        }

        private void isEmptyCb(ArrayList cb)
        {
            for (int i = 0; i < cb.Count; i++)
            {
                if (((ComboBox)cb[i]).Text.Equals("Selecione"+""))
                {
                    MessageBox.Show("Campo " + ((ComboBox)cb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((ComboBox)cb[i]).Focus();
                    flag2 = true;
                    return;
                }
            }
            flag2 = false;
        }

        private void isEmptyMtb(ArrayList mtb)
        {
            for (int i = 0; i < mtb.Count; i++)
            {
                if (((MaskedTextBox)mtb[i]).Text.Equals(""))
                {
                    MessageBox.Show("Campo " + ((MaskedTextBox)mtb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((MaskedTextBox)mtb[i]).Focus();
                    flag3 = true;
                    return;
                }
            }
            flag3 = false;
        }

        private void btCadastrarTerceiros_Click(object sender, EventArgs e) {
            isEmptyTb(arrayTbsCadastrar);
            if (!flag)
            {
                isEmptyCb(arrayCbsCadastrar);
                if (!flag2)
                {
                    isEmptyMtb(arrayMtbsCadastrar);
                    if (!flag3)
                    {
                        //Posteriormente deverá validar o cnpj do terceiro
                        ter.Terc_cod = int.Parse(tbCadastrarCodTerceiros.Text);
                        ter.Terc_nome = tbCadastrarNomeTerceiros.Text;
                        ter.Terc_email = tbCadastrarEmailTerceiros.Text;
                        ter.Terc_cnpj = mtbCadastrarCnpjTerceiros.Text;
                        ter.Terc_fone = mtbCadastrarFoneTerceiros.Text;
                        ter.End_rua = tbCadastrarAvRuaTerceiros.Text;
                        ter.End_num = int.Parse(tbCadastrarNumeroTerceiros.Text);
                        ter.End_complemento = tbCadastrarComplementoTerceiros.Text;
                        ter.End_estado = cbCadastrarUfTerceiros.Text;
                        ter.End_cidade = cbCadastrarCidadeTerceiros.Text;
                        ter.End_bairro = cbCadastrarBairroTerceiros.Text;
                        ter.End_cep = mtbCadastrarCepTerceiros.Text;
                        try
                        {
                            fachada.inserirTerceiro(ter);
                            MessageBox.Show("Terceiro cadastrado com sucesso", "Cadastro Realizado", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            limparTela();
                            tbCadastrarCodTerceiros.Text = fachada.buscarCodigoTerceiro().ToString();
                            tbCadastrarCodTerceiros.Focus();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
        }

        private void btLimparTerceiros_Click(object sender, EventArgs e) {
            DialogResult resultado = MessageBox.Show("Você tem certeza que quer limpar a tela?", "Limpar Tela", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (resultado == System.Windows.Forms.DialogResult.Yes) {
                limparTela();
                tbCadastrarNomeTerceiros.Focus();
            }
        }

        private void btAlterarBuscarTerceiros_Click(object sender, EventArgs e) {
            Terceiro terceiro = new Terceiro();
            try {
                terceiro = fachada.buscarTerceiro(int.Parse(tbAlterarBuscarCod.Text));
                tbAlterarCodTerceiros.Text = terceiro.Terc_cod.ToString();
                tbAlterarNomeTerceiros.Text = terceiro.Terc_nome;
                tbAlterarEmailTerceiros.Text = terceiro.Terc_email;
                mtbAlterarCnpjTerceiros.Text = terceiro.Terc_cnpj;
                mtbAlterarFoneTerceiros.Text = terceiro.Terc_fone;
                tbAlterarAvRuaTerceiros.Text = terceiro.End_rua;
                tbAlterarNumeroTerceiros.Text = terceiro.End_num.ToString();
                tbAlterarComplementoTerceiros.Text = terceiro.End_complemento;
                cbAlterarUfTerceiros.Text = terceiro.End_estado;
                cbAlterarCidadeTerceiros.Text = terceiro.End_cidade;
                cbAlterarBairroTerceiros.Text = terceiro.End_bairro;
                mtbAlterarCepTerceiros.Text = terceiro.End_cep;

                gbAlterarDadosDoTerceiroTerceiros.Visible = true;
                gbAlterarEnderecoTerceiros.Visible = true;
            } catch (Exception ex) {
                MessageBox.Show(ex.Message, "Falha na Busca", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limparTela();
                gbAlterarDadosDoTerceiroTerceiros.Visible = false;
                gbAlterarEnderecoTerceiros.Visible = false;
                tbAlterarBuscarCod.Focus();
            }
        }

        private void btAlterarTerceiros_Click(object sender, EventArgs e) {
            isEmptyTb(arrayTbsAlterar);
            if (!flag)
            {
                isEmptyCb(arrayCbsAlterar);
                if (!flag2)
                {
                    isEmptyMtb(arrayMtbsAlterar);
                    if (!flag3)
                    {
                        Terceiro novoTerceiro = new Terceiro();
                        novoTerceiro.Terc_cod = int.Parse(tbAlterarCodTerceiros.Text);
                        novoTerceiro.Terc_nome = tbAlterarNomeTerceiros.Text;
                        novoTerceiro.Terc_email = tbAlterarEmailTerceiros.Text;
                        novoTerceiro.Terc_cnpj = mtbAlterarCnpjTerceiros.Text;
                        novoTerceiro.Terc_fone = mtbAlterarFoneTerceiros.Text;
                        novoTerceiro.End_rua = tbAlterarAvRuaTerceiros.Text;
                        novoTerceiro.End_num = int.Parse(tbAlterarNumeroTerceiros.Text);
                        novoTerceiro.End_complemento = tbAlterarComplementoTerceiros.Text;
                        novoTerceiro.End_estado = cbAlterarUfTerceiros.Text;
                        novoTerceiro.End_cidade = cbAlterarCidadeTerceiros.Text;
                        novoTerceiro.End_bairro = cbAlterarBairroTerceiros.Text;
                        novoTerceiro.End_cep = mtbAlterarCepTerceiros.Text;
                        try
                        {
                            fachada.alterarTerceiro(int.Parse(tbAlterarCodTerceiros.Text), novoTerceiro);
                            MessageBox.Show("Terceiro alterado com sucesso", "Alteração Realizada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            gbAlterarDadosDoTerceiroTerceiros.Visible = false;
                            gbAlterarEnderecoTerceiros.Visible = false;
                            limparTela();
                            tbAlterarBuscarCod.Focus();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            tbAlterarBuscarCod.Focus();
                        }
                    }
                }
            }
        }

        private void btExcluirBuscarTerceiros_Click(object sender, EventArgs e) {
            Terceiro terceiro = new Terceiro();
            try {
                terceiro = fachada.buscarTerceiro(int.Parse(tbExcluirBuscarCod.Text));
                tbExcluirCodTerceiros.Text = terceiro.Terc_cod.ToString();
                tbExcluirNomeTerceiros.Text = terceiro.Terc_nome;
                tbExcluirEmailTerceiros.Text = terceiro.Terc_email;
                mtbExcluirCnpjTerceiros.Text = terceiro.Terc_cnpj;
                mtbExcluirFoneTerceiros.Text = terceiro.Terc_fone;
                tbExcluirAvRuaTerceiros.Text = terceiro.End_rua;
                tbExcluirNumeroTerceiros.Text = terceiro.End_num.ToString();
                tbExcluirComplementoTerceiros.Text = terceiro.End_complemento;
                cbExcluirUfTerceiros.Text = terceiro.End_estado;
                cbExcluirCidadeTerceiros.Text = terceiro.End_cidade;
                cbExcluirBairroTerceiros.Text = terceiro.End_bairro;
                mtbExcluirCepTerceiros.Text = terceiro.End_cep;
            } catch (Exception ex) {
                MessageBox.Show(ex.Message, "Falha na Busca", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limparTela();
                tbExcluirBuscarCod.Focus();
            }
        }

        private void btExcluirTerceiros_Click(object sender, EventArgs e) {
            DialogResult resultado = MessageBox.Show("Você tem certeza que quer excluir esse terceiro?", "Deletar Terceiro!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (resultado == System.Windows.Forms.DialogResult.Yes) {
                try {
                    fachada.excluirTerceiro(int.Parse(tbExcluirCodTerceiros.Text));
                    MessageBox.Show("Terceiro excluido com sucesso", "Exclusão Realizada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limparTela();
                    tbExcluirBuscarCod.Focus();
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    tbExcluirBuscarCod.Focus();
                }
            }
        }

        private void frmTerceiros_FormClosing(object sender, FormClosingEventArgs e) {
            instancia = null;
        }

        private void cbCadastrarUfTerceiros_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbCadastrarUfTerceiros.Text == "BA")
            {
                cbCadastrarCidadeTerceiros.Items.Clear();
                cbCadastrarCidadeTerceiros.Items.AddRange(new object[] { "Feira de Santana", "Porto Seguro", "Salvador" });
            }
            else if (cbCadastrarUfTerceiros.Text == "PE")
            {
                cbCadastrarCidadeTerceiros.Items.Clear();
                cbCadastrarCidadeTerceiros.Items.AddRange(new object[] { "Camaragibe", "Olinda", "Recife" });
            }
            else if (cbCadastrarUfTerceiros.Text == "RJ")
            {
                cbCadastrarCidadeTerceiros.Items.Clear();
                cbCadastrarCidadeTerceiros.Items.AddRange(new object[] { "Buzios", "Parati", "Rio de Janeiro" });
            }
        }

        private void cbCadastrarCidadeTerceiros_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbCadastrarCidadeTerceiros.Text == "Camaragibe")
            {
                cbCadastrarBairroTerceiros.Items.Clear();
                cbCadastrarBairroTerceiros.Items.AddRange(new object[] { "Bairro Novo", "Timbi", "Tabatinga" });
            }
            else if (cbCadastrarCidadeTerceiros.Text == "Olinda")
            {
                cbCadastrarBairroTerceiros.Items.Clear();
                cbCadastrarBairroTerceiros.Items.AddRange(new object[] { "Alto da Sé", "Beberibe", "Peixinhos" });
            }
            else if (cbCadastrarCidadeTerceiros.Text == "Recife")
            {
                cbCadastrarBairroTerceiros.Items.Clear();
                cbCadastrarBairroTerceiros.Items.AddRange(new object[] { "Boa Viagem", "Casa Forte", "Engenho do Meio", "Imbiribeira", "Iputinga", "Várzea" });
            }
            else if (cbCadastrarCidadeTerceiros.Text == "Rio de Janeiro")
            {
                cbCadastrarBairroTerceiros.Items.Clear();
                cbCadastrarBairroTerceiros.Items.AddRange(new object[] { "Copacabana", "Leblon", "Roçinha" });
            }
        }

        private void cbAlterarUfTerceiros_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbAlterarUfTerceiros.Text == "BA")
            {
                cbAlterarCidadeTerceiros.Items.Clear();
                cbAlterarCidadeTerceiros.Items.AddRange(new object[] { "Feira de Santana", "Porto Seguro", "Salvador" });
            }
            else if (cbAlterarUfTerceiros.Text == "PE")
            {
                cbAlterarCidadeTerceiros.Items.Clear();
                cbAlterarCidadeTerceiros.Items.AddRange(new object[] { "Camaragibe", "Olinda", "Recife" });
            }
            else if (cbAlterarUfTerceiros.Text == "RJ")
            {
                cbAlterarCidadeTerceiros.Items.Clear();
                cbAlterarCidadeTerceiros.Items.AddRange(new object[] { "Buzios", "Parati", "Rio de Janeiro" });
            }
        }

        private void cbAlterarCidadeTerceiros_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbAlterarCidadeTerceiros.Text == "Camaragibe")
            {
                cbAlterarBairroTerceiros.Items.Clear();
                cbAlterarBairroTerceiros.Items.AddRange(new object[] { "Bairro Novo", "Timbi", "Tabatinga" });
            }
            else if (cbAlterarCidadeTerceiros.Text == "Olinda")
            {
                cbAlterarBairroTerceiros.Items.Clear();
                cbAlterarBairroTerceiros.Items.AddRange(new object[] { "Alto da Sé", "Beberibe", "Peixinhos" });
            }
            else if (cbAlterarCidadeTerceiros.Text == "Recife")
            {
                cbAlterarBairroTerceiros.Items.Clear();
                cbAlterarBairroTerceiros.Items.AddRange(new object[] { "Boa Viagem", "Casa Forte", "Engenho do Meio", "Imbiribeira", "Iputinga", "Várzea" });
            }
            else if (cbAlterarCidadeTerceiros.Text == "Rio de Janeiro")
            {
                cbAlterarBairroTerceiros.Items.Clear();
                cbAlterarBairroTerceiros.Items.AddRange(new object[] { "Copacabana", "Leblon", "Roçinha" });
            }
        }

        private void cbCadastrarUfTerceiros_Leave(object sender, EventArgs e)
        {
            if (cbCadastrarUfTerceiros.Text.Equals(""))
            {
                cbCadastrarUfTerceiros.Text = "Selecione";
            }
        }

        private void cbCadastrarCidadeTerceiros_Leave(object sender, EventArgs e)
        {
            if (cbCadastrarCidadeTerceiros.Text.Equals(""))
            {
                cbCadastrarCidadeTerceiros.Text = "Selecione";
            }
        }

        private void cbCadastrarBairroTerceiros_Leave(object sender, EventArgs e)
        {
            if (cbCadastrarBairroTerceiros.Text.Equals(""))
            {
                cbCadastrarBairroTerceiros.Text = "Selecione";
            }
        }

        private void cbAlterarUfTerceiros_Leave(object sender, EventArgs e)
        {
            if (cbAlterarUfTerceiros.Text.Equals(""))
            {
                cbAlterarUfTerceiros.Text = "Selecione";
            }
        }

        private void cbAlterarCidadeTerceiros_Leave(object sender, EventArgs e)
        {
            if (cbAlterarCidadeTerceiros.Text.Equals(""))
            {
                cbAlterarCidadeTerceiros.Text = "Selecione";
            }
        }

        private void cbAlterarBairroTerceiros_Leave(object sender, EventArgs e)
        {
            if (cbAlterarBairroTerceiros.Text.Equals(""))
            {
                cbAlterarBairroTerceiros.Text = "Selecione";
            }
        }
    }
}
